「S3 にあるダブルクォーテーション引用符の CSV データを Glue のクローラで検出し、Athena でクエリ実行する」で分類子を使ってみた
いわさです。
S3に格納したCSVからGlueクローラでデータカタログを作成する際に、ダブルクォーテーションの処理を行うために シリアル化ライブラリに OpenCSVSerDe を設定する必要があります。
弊社の以下のブログにて設定方法が紹介されています。
今回、Glueに関する技術調査をする中でカスタム分類子を試しました。
調査の副産物ではあるのですが、CSV読み込む時、これ便利なのでは気づいたので記事にしてみました。
分類子とは
クローラでメタデータ判定する際に使用されるのですが、データ形式が一致する場合にスキーマ定義やシリアライザなど諸々を良い感じに設定してくれます。
通常クローラに完全に任せた場合だとシリアライザやデータ型が期待どおりにならないケースがありますが、分類子を使うとある程度指定することが出来ます。
今回のケースですと、CSV用に設定した分類子を使うことでCSVとして分類され、OpenCSVSerDeシリアライザが設定されます。
やってみた
まずは、前述した記事を参考に price-list.csv をS3に配置します。
パーティションキーを設定したかったので、Hive形式で格納します。
メニューの分類子から追加を行います。
分類子タイプにCSVを指定し、列の区切り文字と引用符、列見出しと処理オプションを指定します。
今回のサンプルデータは見出しがあるので、「見出しあり」を指定しました。
分類子が作成出来たら、次はクローラを作成しましょう。
クローラ作成時にカスタム分類子を指定するだけで良いです。
他は通常どおりで。
オンデマンドで作成したので手動実行が必要です。
早速、クローラを実行してみましょう。
今回のサンプルだとクローラの処理完了まで、1~2分でしょうか。
完了したら、メニューのデータテーブルからテーブル詳細を確認してみましょう。
シリアル化ライブラリに org.apache.hadoop.hive.serde2.OpenCSVSerde
が選択されており、各パラメータも設定されていますね。
Athenaでクエリを投げてみましょう。
ダブルクォーテーションが考慮されたデータを取得することが出来ました。
まとめ
分類子を使わずにHive形式のCSVをOpenCSVSerDeで処理したくて試行錯誤していました。
手動で行う際にはデータ型の変更などが必要になるのですが、分類子で簡単に処理できる場合はクローラに組み込んで利用するのは便利だと感じました。